diff --git a/module/compose/scheme.sh b/module/compose/scheme.sh
new file mode 100644
index 0000000..666d782
--- /dev/null
+++ b/module/compose/scheme.sh
@@ -0,0 +1,283 @@
+#!/bin/bash
+#
+# generate a new docker-compose.yml
+#
+# Copyright 2019 Luigi Santivetti <luigi.santivetti@gmail.com>
+
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice (including the next
+# paragraph) shall be included in all copies or substantial portions of the
+# Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+if [ "${_APACHE_HAS_MEDIA_}" -eq 1 ]; then
+	declare -r compose_has_mount_media="\
+      - ${_APACHE_HTML_PHOTOS_D_}:/var/www/html/photos
+      - ${_APACHE_HTML_VIDEOS_D_}:/var/www/html/videos"
+else
+	declare -r compose_has_mount_media=""
+fi
+
+if [ "${_GERRIT_HAS_HTTPS_}" -eq 1 ]; then
+	declare -r compose_has_secure_store="\
+      - ${_GERRIT_DKRC_KEYSTORE_F_}:${_GERRIT_KEYSTORE_}:ro
+      - ${_GERRIT_DKRC_SSLIB_F_}:${_GERRIT_SSLIB_}"
+else
+	declare -r compose_has_secure_store=""
+fi
+
+declare -r docker_compose_t="\
+version: '${_COMPOSE_API_VERSION_}'
+networks:
+  frontend:
+    driver: bridge
+    ipam:
+      config:
+        - subnet: ${_COMPOSE_SUBNET_FRONTEND_IP_}/${_COMPOSE_SUBNET_BIT_}
+  backend:
+    driver: bridge
+    ipam:
+      config:
+        - subnet: ${_COMPOSE_SUBNET_BACKEND_IP_}/${_COMPOSE_SUBNET_BIT_}
+services:
+  ${_GERRIT_DKRC_SERVICE_}:
+    image: ${_GERRIT_DKRC_IMAGE_}
+    build:
+      context: ${_GERRIT_DKRC_CONTEXT_}
+      dockerfile: ${_GERRIT_DKRC_DOCKERFILE_}
+    container_name: ${_GERRIT_DKRC_CONTAINER_}
+    expose:
+      - \"${_GERRIT_PROXY_PORT_}\"
+      - \"${_GERRIT_SSH_PORT_}\"
+    ports:
+      - \"${_COMPOSE_HOST_SSH_PORT_}:${_GERRIT_SSH_PORT_}\"
+    volumes:
+      - ${_GERRIT_DKRC_ROOTFS_}/index:/var/gerrit/index
+      - ${_GERRIT_DKRC_ROOTFS_}/cache:/var/gerrit/cache
+      - ${_GERRIT_DKRC_ROOTFS_}/git:/var/gerrit/git
+      - ${_GERRIT_DKRC_ETC_D_}:/var/gerrit/etc
+${compose_has_secure_store}
+    environment:
+      - CANONICAL_WEB_URL=${_GERRIT_CANON_URL_}
+      - LISTEN_URL=${_GERRIT_LISTEN_URL_}
+    depends_on:
+      - ${_APACHE_DKRC_SERVICE_}
+    networks:
+      frontend:
+        ipv4_address: ${_GERRIT_DKRC_FRONTEND_IP_}
+    entrypoint: /bin/bash -c \"/${_GERRIT_DKRC_ENTRYPOINT_} \${GERRIT_ENTRYPOINT_ARGS}\"
+  ${_APACHE_DKRC_SERVICE_}:
+    environment:
+      - HOST_PEPPER=\${_PASSWD_APACHE_HASH_HMAC_PEPPER_}
+      - MYSQL_PASSWORD=\${_PASSWD_MYSQL_DB_PASSWORD_}
+      - MYSQL_USER=\${_PASSWD_MYSQL_DB_USERNAME_}
+    env_file:
+      - ${_COMPOSE_ENVIRONMENT_}
+    image: ${_APACHE_DKRC_IMAGE_}
+    build:
+      context: ${_APACHE_DKRC_CONTEXT_}
+      dockerfile: ${_APACHE_DKRC_DOCKERFILE_}
+    container_name: ${_APACHE_DKRC_CONTAINER_}
+    ports:
+      - \"${_COMPOSE_HOST_HTTP_PORT_}:${_APACHE_HTTP_PORT_}\"
+      - \"${_COMPOSE_HOST_HTTPS_PORT_}:${_APACHE_HTTPS_PORT_}\"
+    volumes:
+      - ${_APACHE_DKRC_PORTS_F_}:/etc/apache2/ports.conf:ro
+      - ${_APACHE_DKRC_CONF_F_}:/etc/apache2/apache2.conf:ro
+      - ${_APACHE_DKRC_AVAILABLE_D_}:/etc/apache2/sites-available:ro
+      - ${_APACHE_DKRC_ENABLED_D_}:/etc/apache2/sites-enabled:ro
+      - ${_MYSQL_ROOTFS_SSL_D_}:${_APACHE_CON_SSL_MYSQL_D_}:ro
+      - ${_APACHE_DKRC_CERT_L_}:${_APACHE_CON_SSL_D_}:ro
+      - ${_APACHE_EXT_AUTH_F_}:${_APACHE_CON_EXT_AUTH_F_}:ro
+      - ${_APACHE_DKRC_LOG_D_}:/var/log/apache2
+      - ${_APACHE_DKRC_WWW_D_}:/var/www
+${compose_has_mount_media}
+    depends_on:
+      - ${_MYSQL_DKRC_SERVICE_}
+    networks:
+      frontend:
+        ipv4_address: ${_APACHE_DKRC_FRONTEND_IP_}
+      backend:
+        ipv4_address: ${_APACHE_DKRC_BACKEND_IP_}
+  ${_MYSQL_DKRC_SERVICE_}:
+    environment:
+      - MYSQL_ROOT_PASSWORD=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_}
+      - MYSQL_PASSWORD=\${_PASSWD_MYSQL_DB_PASSWORD_}
+      - MYSQL_USER=\${_PASSWD_MYSQL_DB_USERNAME_}
+    env_file:
+      - ${_COMPOSE_ENVIRONMENT_}
+    image: ${_MYSQL_DKRC_IMAGE_}
+    build:
+      context: ${_MYSQL_DKRC_CONTEXT_}
+      dockerfile: ${_MYSQL_DKRC_DOCKERFILE_}
+    container_name: ${_MYSQL_DKRC_CONTAINER_}
+    restart: always
+    networks:
+      backend:
+        ipv4_address: ${_MYSQL_DKRC_BACKEND_IP_}
+    expose:
+      - \"${_MYSQL_DB_PORT_}\"
+    volumes:
+      - ${_MYSQL_ROOTFS_SSL_D_}:${_MYSQL_CON_SSL_D_}
+      - ${_MYSQL_INITDB_F_}:/docker-entrypoint-initdb.d/initdb.sql
+      - ${_MYSQL_MYCONF_F_}:/etc/mysql/my.cnf:ro
+      - ${_MYSQL_MYSQL_D_}:/var/lib/mysql
+      - ${_MYSQL_LOG_D_}:${_MYSQL_CON_LOG_D_}"
+
+declare -r environment_t="\
+MYSQL_DATABASE=${_MYSQL_DB_NAME_}
+MYSQL_HOSTNAME=${_MYSQL_DKRC_BACKEND_IP_}
+MYSQL_SSL_CAPATH=${_APACHE_CON_SSL_MYSQL_D_}
+MYSQL_SSL_CERT=${_APACHE_CON_SSL_MYSQL_CERT_F_}
+MYSQL_SSL_KEY=${_APACHE_CON_SSL_MYSQL_KEY_F_}
+MYSQL_SSL_CA=${_APACHE_CON_SSL_MYSQL_CA_F_}
+HOST_NAME=${_APACHE_SERVER_NAME_}"
+
+declare -r compose_cli_bang_t="\
+#!/bin/bash
+
+if (return 0 2>/dev/null); then
+	echo \"You must run this script\" >&2
+	return 1
+fi
+
+function __help
+{
+	cat <<EOF; exit 0
+`printf \"\\033[1m%s\\033[0m\\n\" \"NAME\"`
+
+  \${BASH_SOURCE[0]//.\//} - docker-compose CLI for ${host_name}
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"USAGE\"`
+
+  \$ \${BASH_SOURCE[0]} [ OPTION ] [ ARGS ... ]
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"ENVIRONMENT\"`
+
+  PASSWD_F                    path to file containing runtime credentials
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"OPTION\"`
+
+      --start [init]          start instance. If \\\`init\\\` is passed,
+                              then do entrypoint.sh initialization steps
+                              and run in the foreground not as a daemon
+      --stop                  stop instance
+  -pc|--prune-containers      delete all services container
+  -pn|--prune-networks        delete all services network
+  -ps|--prune-system          delete all images, containers, cache,
+                              networks and volumes
+  -bs|--build-services        build all services and networks
+   -h|--help                  show this help
+
+`printf \"\\033[1m%s\\033[0m\\n\" \"END\"`
+EOF
+}
+
+function source_passwd_file
+{
+	if [ ! -f \"\${PASSWD_F}\" ]; then
+		echo \"error: PASSWD file not found\" >&2
+		exit 1
+	fi
+
+	if ! source \"\${PASSWD_F}\"; then
+		echo \"error: PASSWD file not sourced\" >&2
+		exit 1
+	fi
+}
+
+function __dkrc_start
+{
+	local -i error
+
+	source_passwd_file
+	pushd \"${instance_d}\" >/dev/null || exit 1
+
+	if sudo systemctl is-active --quiet service apache2.service; then
+		echo \"warning: shutting down apache2.service\" >&2
+		sudo systemctl stop apache2.service
+	fi
+
+	case \"\$1\" in
+		init )
+			GERRIT_ENTRYPOINT_ARGS=init \\
+				_PASSWD_APACHE_HASH_HMAC_PEPPER_=\${_PASSWD_APACHE_HASH_HMAC_PEPPER_} \\
+				_PASSWD_MYSQL_DB_USERNAME_=\${_PASSWD_MYSQL_DB_USERNAME_} \\
+				_PASSWD_MYSQL_DB_PASSWORD_=\${_PASSWD_MYSQL_DB_PASSWORD_} \\
+				_PASSWD_MYSQL_DB_PASSWORD_ROOT_=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} \\
+				sudo -E docker-compose up ;;
+		*     )
+			[ -z \"\$1\" ] || echo \"warning: input ignored: \$1\" >&2
+
+			_PASSWD_APACHE_HASH_HMAC_PEPPER_=\${_PASSWD_APACHE_HASH_HMAC_PEPPER_} \\
+				_PASSWD_MYSQL_DB_USERNAME_=\${_PASSWD_MYSQL_DB_USERNAME_} \\
+				_PASSWD_MYSQL_DB_PASSWORD_=\${_PASSWD_MYSQL_DB_PASSWORD_} \\
+				_PASSWD_MYSQL_DB_PASSWORD_ROOT_=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} \\
+				sudo -E docker-compose up -d ;;
+	esac
+
+	error=\"\$?\"
+	popd >/dev/null
+
+	return \$error
+}
+
+function __dkrc_stop
+{
+	sudo docker stop \$(sudo docker ps -a -q)
+}
+
+function __dkrc_prune_containers
+{
+	sudo docker rm \$(sudo docker ps -a -q)
+}
+
+function __dkrc_prune_networks
+{
+	sudo docker network prune -f
+}
+
+function __dkrc_prune_system
+{
+	sudo docker system prune --all
+}
+
+function __dkrc_build_services
+{
+	local -i error
+
+	source_passwd_file
+	pushd \"${instance_d}\" >/dev/null || exit 1
+
+	_PASSWD_APACHE_HASH_HMAC_PEPPER_=\${_PASSWD_APACHE_HASH_HMAC_PEPPER_} \\
+		_PASSWD_MYSQL_DB_USERNAME_=\${_PASSWD_MYSQL_DB_USERNAME_} \\
+		_PASSWD_MYSQL_DB_PASSWORD_=\${_PASSWD_MYSQL_DB_PASSWORD_} \\
+		_PASSWD_MYSQL_DB_PASSWORD_ROOT_=\${_PASSWD_MYSQL_DB_PASSWORD_ROOT_} \\
+		sudo -E docker-compose build --force-rm --no-cache \$@
+	error=\"\$?\"
+	popd >/dev/null
+
+	return \$error
+}
+
+case \"\$1\" in
+      --start            ) __dkrc_start \"\$2\"    ;;
+      --stop             ) __dkrc_stop             ;;
+  -pc|--prune-containers ) __dkrc_prune_containers ;;
+  -pn|--prune-networks   ) __dkrc_prune_networks   ;;
+  -ps|--prune-system     ) __dkrc_prune_system     ;;
+  -bs|--build-services   ) __dkrc_build_services   ;;
+   -h|--help             ) __help                  ;;
+esac"
